import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;

/**
 * Cette classe permet de charger une partie depuis un fichier ".a"
 * Le fichier ".a" contient le trait permettant de savoir quel et le tour du joueur (noir ou blanc)
 * afin de l'envoyer à la classe Alice qui se chargera de reconstruire le plateau de jeu tel qui était au moment de la sauvegarde
 * 
 * On séléctionne le fichier ".a" dans la Fenetre JFileChooser et on appelle ensuite la méthode de chargement de la classe Alice 
 **/

public class RestorFenetre extends FileFilter{
	//Description et extension acceptée par le filtre
	private String description;
	private String extension;
	
	/* Constructeur()
	 * On utilise ici un filtre qui séléctionne le format de fichier voulu, ici ".a" ou fichier "Alice"
	 * On utilise aussi une fenêtre de parcours d'arborécence de fichier java : le JFileCooser
	 * */
	public RestorFenetre(Fenetre f)
	{
		f.disable();
		
		/*Création du filtre*/
		FileFilter alice = new RestorFenetre("Fichier Alice",".a");
		
		/*Création du JFileChooser*/
		JFileChooser c = new JFileChooser("./src/save");
		c.addChoosableFileFilter(alice);
		int result = c.showOpenDialog(null);
		
		/*
		 * result stock la réponse "utilisateur" : clique sur "Ouvrir", "Annuler"...
		 * Ici on teste la réponse "Ouvrir"
		 * */
		if (result == JFileChooser.APPROVE_OPTION)
		{
			/*Reconstruction du jeu : du JPanel Alice plus précisément*/
			f.remove(f.getA()); 		/*On supprime le panel alice de la fenêtre de jeu*/
			f.setA(new Alice(true,f));	/*Les pieces et les joueurs ne doivent pas être initialisés --> save = true*/
			
			if (c.getSelectedFile() != null )
			{
				String traitS = null; /*Variable stoquant le contenu du fichier ".a"*/
				
				/*lecture du fichier*/
				try{
					InputStream ips=new FileInputStream(c.getSelectedFile()); 
					InputStreamReader ipsr=new InputStreamReader(ips);
					BufferedReader br=new BufferedReader(ipsr);
					traitS = br.readLine();
					br.close();
				}		
				catch (Exception e){
					System.out.println(e.toString());
				}
				
				/* Conversion du contenu du fichier ".a" contenant le trait
				 * de String en int pour l'envoyer à Alice
				 * */
				int trait;
				trait= Integer.parseInt(traitS);
				
				/*Appel de la fontion de chargement de la classe Alice et affichage du nouveau plateau de jeu*/
				f.getA().chargerPartie(c.getSelectedFile().getName(), trait );
				f.getContentPane().add(f.getA());
				f.pack();
				f.setSize(900, 600);
				f.enable();
			}
		}
		else
		{
			f.enable();
		}
	}
	
	/*Constructeur parametré*/
	public RestorFenetre(String description, String extension){
		if(description == null || extension ==null){
			throw new NullPointerException("La description (ou extension) ne peut être null.");	
		}
		this.description = description;
		this.extension = extension;
	}
	
	/*Implémentation de FileFilter*/
	public boolean accept(File file){
		if(file.isDirectory()) { 
			return true; 
		} 
		String nomFichier = file.getName().toLowerCase(); 
		
		return nomFichier.endsWith(extension);
	}
	
	public String getDescription(){
		return description;
	}
}